package com.practice.Lambda;


import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;

/**
 * Lambda 表达式 是一种简化匿名类的写法，用于实现函数式接口。
 * 函数式接口是只包含一个抽象方法的接口，Lambda 表达式可以用于替代匿名类的写法，使代码更加简洁和易读。
 * 一般为 (parameters) -> { statements; } 或 (parameters) -> expression
 * 其中，parameters 是参数列表，statements 是方法体，expression 是表达式。
 * 当方法体只有一条语句时，可以省略花括号和 return 关键字。
 * 当参数列表只有一个参数时，可以省略圆括号。
 * 当参数列表为空时，可以省略圆括号。
 */
public class javaLambdaPractice {

    //假设你有一个方法 method，它的参数是一个函数式接口的实例。
    public static void method(Runnable r) {
        r.run();
    }

    public static void main(String[] args) {
        // 你可以使用 Lambda 表达式来调用这个方法：
        // 这里的 () -> System.out.println("Hello, Lambda!") 是一个 Lambda 表达式，
        // 表示一个没有参数的 Runnable 接口的实现。
        method(() -> System.out.println("Hello, Lambda!"));

        List<String> list = Arrays.asList("apple", "banana", "cherry");
        list.sort((a, b) -> a.compareTo(b)); // 使用 Lambda 表达式实现 Comparator
        System.out.println(list);

        Consumer<String> consumer = s -> System.out.println("Consumed: " + s);
        consumer.accept("Hello");

        Function<String, Integer> function = c -> c.length();
        System.out.println(function.apply("Hello"));
    }
}
